/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.documentar.model;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Santos
 */
public class AssociarColunaVersaoModel {

    private ProdutoModel produto;
    private VersaoModel versao;
    private ColunaModel coluna;
    private String tipoDadoPadrao;
    private double tamanhoDadoPadrao;
    private char aceitaNullPadrao;
    private String valorPadrao;
    private char autoIncrementoPadrao;
    private char chavePrimariaPadrao;
    private char chaveEstrangeiraPadrao;
    private char chaveUnicaPadrao;
    private char temCheckPadrao;
    private char acao;
    private char ativo;
    private String sql;
    private String nomeTela;

    public String getNomeTela() {
        return nomeTela;
    }

    public void setNomeTela(String nomeTela) {
        this.nomeTela = nomeTela;
    }

    public String getSql() {
        return sql;
    }

    /**
     * Retonar o SQL fazendo tratamento de caracter especial
     *
     * @return
     */
    public String getSqlTextArea() {
        return sql.replaceAll("\"", "'");
    }

    public void setSql(String sql) {
        this.sql = sql.replaceAll("'", "\"");
    }

    public char getAcao() {
        return acao;
    }

    public void setAcao(char acao) {
        this.acao = acao;
    }

    public VersaoModel getVersao() {
        if (versao == null) {
            versao = new VersaoModel();
        }
        return versao;
    }

    public void setVersao(VersaoModel versao) {
        this.versao = versao;
    }

    public String getTipoDadoPadrao() {
        return tipoDadoPadrao;
    }

    public void setTipoDadoPadrao(String tipoDadoPadrao) {
        this.tipoDadoPadrao = tipoDadoPadrao;
    }

    public double getTamanhoDadoPadrao() {
        return tamanhoDadoPadrao;
    }

    public void setTamanhoDadoPadrao(double tamanhoDadoPadrao) {
        this.tamanhoDadoPadrao = tamanhoDadoPadrao;
    }

    public char getAceitaNullPadrao() {
        return aceitaNullPadrao;
    }

    public void setAceitaNullPadrao(char aceitaNullPadrao) {
        this.aceitaNullPadrao = aceitaNullPadrao;
    }

    public String getValorPadrao() {
        return valorPadrao;
    }

    public void setValorPadrao(String valorPadrao) {
        this.valorPadrao = valorPadrao;
    }

    public char getAutoIncrementoPadrao() {
        return autoIncrementoPadrao;
    }

    public void setAutoIncrementoPadrao(char autoIncrementoPadrao) {
        this.autoIncrementoPadrao = autoIncrementoPadrao;
    }

    public char getChavePrimariaPadrao() {
        return chavePrimariaPadrao;
    }

    public void setChavePrimariaPadrao(char chavePrimariaPadrao) {
        this.chavePrimariaPadrao = chavePrimariaPadrao;
    }

    public char getChaveEstrangeiraPadrao() {
        return chaveEstrangeiraPadrao;
    }

    public void setChaveEstrangeiraPadrao(char chaveEstrangeiraPadrao) {
        this.chaveEstrangeiraPadrao = chaveEstrangeiraPadrao;
    }

    public char getChaveUnicaPadrao() {
        return chaveUnicaPadrao;
    }

    public void setChaveUnicaPadrao(char chaveUnicaPadrao) {
        this.chaveUnicaPadrao = chaveUnicaPadrao;
    }

    public char getTemCheckPadrao() {
        return temCheckPadrao;
    }

    public void setTemCheckPadrao(char temCheckPadrao) {
        this.temCheckPadrao = temCheckPadrao;
    }

    public char getAtivo() {
        return ativo;
    }

    public void setAtivo(char ativo) {
        this.ativo = ativo;
    }

    /**
     * Ação do script sql na execução do programa
     */
    private String actionScript;
    /**
     * Modelo de um comboBox para utiliza nas telas
     */
    private DefaultComboBoxModel modelComboBox;
    /**
     * Modelo de uma table para utilizar nas telas
     */
    private DefaultTableModel modelTable;
    /**
     * Lista contendo os dados relacionados da consulta feita na tabela setor.
     * Mas é necessário rever o nome dessa variável, sugestão: lista+Classe
     */
    private List<AssociarColunaVersaoModel> listaColuna;
    /**
     * Variavel responsável por recepcionar dados extraidos das consultas
     * executadas na banco de dados
     */
    private ResultSet resultSet;

    public ProdutoModel getProduto() {
        if (produto == null) {
            produto = new ProdutoModel();
        }
        return produto;
    }

    public void setProduto(ProdutoModel produto) {
        this.produto = produto;
    }

    public ColunaModel getColuna() {
        if (coluna == null) {
            coluna = new ColunaModel();
        }
        return coluna;
    }

    public void setColuna(ColunaModel coluna) {
        this.coluna = coluna;
    }

    public List<AssociarColunaVersaoModel> getListaColuna() {
        if (listaColuna == null) {
            listaColuna = new ArrayList<>();
        }
        return listaColuna;
    }

    public void setListaColuna(List<AssociarColunaVersaoModel> listaColuna) {
        this.listaColuna = listaColuna;
    }

    public String getActionScript() {
        return actionScript;
    }

    public void setActionScript(String actionScript) {
        this.actionScript = actionScript;
    }

    public DefaultComboBoxModel getModelComboBox() {
        if (modelComboBox == null) {
            modelComboBox = new DefaultComboBoxModel();
            modelComboBox.addElement("ESCOLHER");
        }
        return modelComboBox;
    }

    public void setModelComboBox(DefaultComboBoxModel modelComboBox) {
        this.modelComboBox = modelComboBox;
    }

    public DefaultTableModel getModelTable() {
        if (modelTable == null) {
            modelTable = new DefaultTableModel();
            modelTable.addColumn("Produto");
            modelTable.addColumn("Versão");
            modelTable.addColumn("Tabela");
            modelTable.addColumn("Coluna");
            modelTable.addColumn("Tipo Dado");
            modelTable.addColumn("Tamanho");
            modelTable.addColumn("Aeita Null");
            modelTable.addColumn("Valor Padrao");
            modelTable.addColumn("Auto Incremento");
            modelTable.addColumn("Chave Primária");
            modelTable.addColumn("Chave Estrangeira");
            modelTable.addColumn("Chave Única");
            modelTable.addColumn("Tem Check");
            modelTable.addColumn("Ação");
            modelTable.addColumn("Ativo");
            modelTable.addColumn("SQL");

        }
        return modelTable;
    }

    public void setModelTable(DefaultTableModel modelTable) {
        this.modelTable = modelTable;
    }

    public ResultSet getResultSet() {
        return resultSet;
    }

    public void setResultSet(ResultSet resultSet) {
        this.resultSet = resultSet;
    }

    /**
     * Metodo responsável por encontrar o cadastro do setor em uma lista
     *
     * @param codigoVersao
     * @param codigoTabela
     * @param codigoColuna
     * @return Modelo da Classe com o dado encontrado
     */
    public AssociarColunaVersaoModel getColunaVersao(int codigoVersao, int codigoTabela, int codigoColuna) {
        AssociarColunaVersaoModel model = null;
        for (AssociarColunaVersaoModel colunaVersaoModel : getListaColuna()) {
            if (colunaVersaoModel.getVersao().getCodigo() == codigoVersao
                    && colunaVersaoModel.getColuna().getTabela().getCodigo() == codigoTabela
                    && colunaVersaoModel.getColuna().getCodigo() == codigoColuna) {
                model = colunaVersaoModel;
                break;
            }
        }
        return model;
    }

}
